package com.youlu.campus.admin.auth.service;

import com.youlu.campus.admin.auth.common.DeviceType;
import com.youlu.campus.admin.auth.dto.UserQueryRequest;
import com.youlu.campus.admin.auth.entity.SystemUser;
import org.springframework.data.domain.Page;

import java.util.List;
import java.util.Map;

public interface UserService {

    Page<SystemUser> query(UserQueryRequest userQueryRequest);

    /**
     * 更新用户和角色
     *
     * @param user
     * @param roleIds
     * @return
     */
    Boolean update(SystemUser user, String[] roleIds);

    /**
     * 修改密码,需要验证老密码
     *
     * @param userId
     * @param comId
     * @param password
     * @param oldPassword
     * @return
     */
    boolean updatePwd(String userId, String comId, String password, String oldPassword);

    /**
     * 修改密码,不需要验证老密码
     *
     * @param userId
     * @param comId
     * @param password
     * @return
     */
    boolean updatePwd(String userId, String comId, String password);

    /**
     * 更新用户信息
     *
     * @param userId
     * @param status
     * @return
     */
    boolean updateUserStatus(String userId, Integer status);

    /**
     * 获取用户和角色名称的映射
     *
     * @param userIdList
     * @return
     */
    Map<String, List<String>> getUserIdAndRoleMaps(List<String> userIdList);

    /**
     * 获取公司中所有User
     *
     * @param tenantId
     * @param isAvailable
     * @return
     */
    List<SystemUser> listAll(String tenantId, Boolean isAvailable);

    /**
     * 通过登录名获取用户
     *
     * @param loginName
     * @param domain
     * @return
     */
    SystemUser get(String tenantId, String loginName, String domain);

    SystemUser get(String tenantId, String regMobile, Boolean available);

    SystemUser getUserCache(String userId);

    void cleanUserDtoCache(String userID);

    List<SystemUser> getUsersByStatusAndRole(String comId, Integer status, String role);

    List<SystemUser> getUsersByComIdAndRole(String comId, String role);

    void logoutCleanCache(String comId, String userId);

    /**
     * 通过公司和状态查询用户
     *
     * @param comId:公司Id
     * @param statuses:状态数组
     * @return
     */
    List<SystemUser> listAll(String comId, List<Integer> statuses);


    void delete(String id, String comId);

    void delete(String id, String comId, String loginUserId);

    SystemUser get(String id);


    List<String> getUserIdsByStatusAndRole(String tenantId, Integer status, String role);

    List<String> getUserIdsByNotStatusAndRole(String tenantId, Integer status, String role);

    void create(SystemUser user, String[] roleIds, String tenantId);

    boolean ifExists(String loginName, String domain);

    Long countByComId(String comId);

    Boolean update(SystemUser user);

    boolean isSupperAdmin(String domain, String loginName);


    /**
     * 更新渠道用户状态
     *
     * @param userId
     * @param deviceType
     * @param status
     * @return
     */
    boolean updateUserStatus(String userId, DeviceType deviceType, Integer status);

    void updateFirstLogin(SystemUser user);

    /**
     * 批量修改密码
     *
     * @param systemAppId
     * @return
     */
    boolean batchModifyPassword(String systemAppId);


    boolean reBatchUpdatePwd(String systemAppId);

}
